package com.abc.xxx.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.abc.xxx.model.Role;
import com.abc.xxx.model.vo.RoleDataScope;

import java.util.List;

public interface RoleService extends IService<Role> {

    /**
     * 检查角色名是否重复
     * @param roleName
     * @return
     */
    boolean isRoleNameExists(String roleName);

    /**
     * 检查即将要更新的角色的新角色名是否重复
     * @param roleId
     * @param roleName
     * @return
     */
    boolean isRoleNameDuplicate(Integer roleId, String roleName);

    /**
     * 保存角色，如果有自定义部门数据权限，一并保存
     * @param role
     */
    void saveRoleAndAccessibleDepts(Role role);

    /**
     * 保存角色，如果有自定义部门数据权限，一并保存
     * @param role
     */
    void updateRoleAndAccessibleDepts(Role role);

    /**
     * 删除角色，一并删除accessible_view和accessible_dept中的关联关系
     * @param roleId
     */
    void deleteRole(Integer roleId);

    /**
     * 查询用户的角色详情，包括数据权限
     *
     * @param userDeptId 用户所属部门
     * @param userRoleId 用户的角色
     * @return
     */
    Role findUserRoleDetail(Integer userDeptId, Integer userRoleId);

    /**
     * 查询用户的数据权限
     * @param userDeptId 用户所属部门
     * @param userRoleId 用户的角色
     * @param userRoleDataScope 用户的角色的数据权限
     * @return
     */
    List<Integer> findUserAccessibleDepts(Integer userDeptId, Integer userRoleId, Integer userRoleDataScope);

    /**
     * 权限管理 - 数据权限 - 回显角色的数据权限
     * @param roleId
     * @return
     */
    RoleDataScope findRoleAccessibleDataScope(Integer roleId);

    /**
     * 权限管理 - 数据权限 - 保存数据权限
     * @param roleId
     * @param roleDataScope
     */
    void assignDataScopePermissions(Integer roleId, RoleDataScope roleDataScope);
}
